package com.atguigu.dac;

/**
 * 汉诺塔问题.
 * 解决的问题是, 将步骤打印
 * The type Hanoi tower.
 */
public class HanoiTower {
    /**
     * The entry point of application.
     *
     * @param args the input arguments
     */
    public static void main(String[] args) {
        int step = step(5, 'A', 'B', 'C');
        System.out.println(step);
    }

    public static int step(int num,char a,char b,char c){
        if(num==1){
            System.out.printf("第%d个盘, 从 %c => %c\n",num,a,c);
            return 1;
        }
        // 两个以上盘子的情况, 将之看做是两个盘子部分.1. 最下面的盘子; 2. 上面其余的所有盘子
        // 1) 将第2部分从a挪至b
        int step1 = step(num - 1, a, c, b);

        // 2) 将第1部分从a挪至c
        System.out.printf("第%d个盘, 从 %c => %c\n",num,a,c);
        int step2=1;

        // 3) 将第2部分从b挪至c
        int step3 = step(num - 1, b, a, c);


        return step1+step2+step3;
    }


}
